-l flag no longer pass to binaries if there's a library in the package
authorPierre Krieger <pierre.krieger1708@gmail.com>
Thu, 13 Nov 2014 15:34:11 +0000 (16:34 +0100)
committerPierre Krieger <pierre.krieger1708@gmail.com>
Thu, 13 Nov 2014 15:34:11 +0000 (16:34 +0100)
src/cargo/ops/cargo_rustc/mod.rs

index fef32aff28b3d404d8e2639c0db29a3fafe9689d..43a42a3c6c708a2c0023e04b50756045798fb8b1 100644 (file)
@@ -407,6 +407,12 @@ fn rustc(package: &Package, target: &Target,
         let mut native_lib_deps = native_lib_deps.into_iter().collect::<Vec<_>>();
         native_lib_deps.sort();
 
+        // If we are a binary and the package also contains a library, then we don't
+        // pass the `-l` flags.
+        let pass_l_flag = target.is_lib() || !package.get_targets().iter().any(|t| {
+            t.is_lib()
+        });
+
         (proc(desc_tx: Sender<String>) {
             let mut rustc = rustc;
 
@@ -419,7 +425,7 @@ fn rustc(package: &Package, target: &Target,
                     for path in output.library_paths.iter() {
                         rustc = rustc.arg("-L").arg(path);
                     }
-                    if id == current_id {
+                    if pass_l_flag && id == current_id {
                         for name in output.library_links.iter() {
                             rustc = rustc.arg("-l").arg(name.as_slice());
                         }